////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  moddualcamsyncv1.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "moddualcamsyncv1.h"
#include "parametersetmanager.h"

MODDUALCAMSYNCV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixdualcamSyncV1TypeClass::chromatixdualcamSyncV1TypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(moduleID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(enableFlag);
    PARAMETER_INITIALIZE(modeSelection);
    PARAMETER_INITIALIZE(convSpeed);
    PARAMETER_INITIALIZE(refPtSelection);
    PARAMETER_INITIALIZE(customRefPt);
    PARAMETER_INITIALIZE(outlierDistance);
    PARAMETER_INITIALIZE(weightFCM);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixdualcamSyncV1TypeClass::chromatixdualcamSyncV1TypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(moduleID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(enableFlag);
    PARAMETER_INITIALIZE(modeSelection);
    PARAMETER_INITIALIZE(convSpeed);
    PARAMETER_INITIALIZE(refPtSelection);
    PARAMETER_INITIALIZE(customRefPt);
    PARAMETER_INITIALIZE(outlierDistance);
    PARAMETER_INITIALIZE(weightFCM);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixdualcamSyncV1TypeClass::~chromatixdualcamSyncV1TypeClass()
{
    UnloadchromatixdualcamSyncV1Type(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixdualcamSyncV1TypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "dualcamSyncV1")) == 0)
    {
        name = "dualcamSyncV1";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load moddualcamSyncV1Level2Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadmoddualcamSyncV1Level2Type(
    ParameterFileSymbolTableEntry* entry,
    moddualcamSyncV1Level2Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW awbglobalelements::awbTriggerDataFloatType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && awbglobalelements::awbglobalelementsClass::LoadawbTriggerDataFloatType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load moddualcamSyncV1Level1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadmoddualcamSyncV1Level1Type(
    ParameterFileSymbolTableEntry* entry,
    moddualcamSyncV1Level1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW moddualcamSyncV1Level2Type[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmoddualcamSyncV1Level2Type(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load moddualcamSyncWeightFCMType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadmoddualcamSyncWeightFCMType(
    ParameterFileSymbolTableEntry* entry,
    moddualcamSyncWeightFCMType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW moddualcamSyncV1Level1Type[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmoddualcamSyncV1Level1Type(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load moddualcamSyncOutlierV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadmoddualcamSyncOutlierV1Type(
    ParameterFileSymbolTableEntry* entry,
    moddualcamSyncOutlierV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW moddualcamSyncV1Level2Type[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmoddualcamSyncV1Level2Type(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load moddualcamSyncRefPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadmoddualcamSyncRefPtV1Type(
    ParameterFileSymbolTableEntry* entry,
    moddualcamSyncRefPtV1Type* structure)
{
    BOOL result = TRUE;
    structure->condition = (dualcamRefPtConditiontype)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->calFactor);
    result = result && awbglobalelements::awbglobalelementsClass::LoadawbPointDataType(entry, &structure->point);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load moddualcamSyncCusRefPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadmoddualcamSyncCusRefPtV1Type(
    ParameterFileSymbolTableEntry* entry,
    moddualcamSyncCusRefPtV1Type* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadFloat(&structure->luxThreshold);
    result = result && entry->ReadFloat(&structure->luxRange);

    // Reading structure->refPt from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->refPtCount);
        structure->refPtID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->refPt   = PARAMETER_NEW moddualcamSyncRefPtV1Type[structure->refPtCount];
        }
        if (!result || structure->refPt == NULL)
        {
            structure->refPtCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->refPtCount; i++)
        {
            result = result && LoadmoddualcamSyncRefPtV1Type(pointerEntry1, &structure->refPt[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixdualcamSyncV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::LoadchromatixdualcamSyncV1Type(
    ParameterFileSymbolTableEntry* entry,
    chromatixdualcamSyncV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadmoduleIDType(entry, &structure->moduleID);
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && entry->ReadInt32(&structure->enableFlag);
    structure->modeSelection = (dualcamSyncModeType)entry->ReadEnum(&result);
    result = result && entry->ReadFloat(&structure->convSpeed);
    structure->refPtSelection = (dualcamRefPtSelecttype)entry->ReadEnum(&result);
    result = result && LoadmoddualcamSyncCusRefPtV1Type(entry, &structure->customRefPt);
    result = result && LoadmoddualcamSyncOutlierV1Type(entry, &structure->outlierDistance);
    result = result && LoadmoddualcamSyncWeightFCMType(entry, &structure->weightFCM);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixdualcamSyncV1TypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixdualcamSyncV1Type::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);
    result = result && entry->ReadInt32(&structure->incr_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload moddualcamSyncV1Level2Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixdualcamSyncV1TypeClass::UnloadmoddualcamSyncV1Level2Type(
    moddualcamSyncV1Level2Type* structure)
{
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload moddualcamSyncV1Level1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixdualcamSyncV1TypeClass::UnloadmoddualcamSyncV1Level1Type(
    moddualcamSyncV1Level1Type* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmoddualcamSyncV1Level2Type(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload moddualcamSyncWeightFCMType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixdualcamSyncV1TypeClass::UnloadmoddualcamSyncWeightFCMType(
    moddualcamSyncWeightFCMType* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmoddualcamSyncV1Level1Type(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload moddualcamSyncOutlierV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixdualcamSyncV1TypeClass::UnloadmoddualcamSyncOutlierV1Type(
    moddualcamSyncOutlierV1Type* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmoddualcamSyncV1Level2Type(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload moddualcamSyncCusRefPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixdualcamSyncV1TypeClass::UnloadmoddualcamSyncCusRefPtV1Type(
    moddualcamSyncCusRefPtV1Type* structure)
{
    PARAMETER_DELETE[] structure->refPt;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixdualcamSyncV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixdualcamSyncV1TypeClass::UnloadchromatixdualcamSyncV1Type(
    chromatixdualcamSyncV1Type* structure)
{
    UnloadmoddualcamSyncCusRefPtV1Type(&structure->customRefPt);
    UnloadmoddualcamSyncOutlierV1Type(&structure->outlierDistance);
    UnloadmoddualcamSyncWeightFCMType(&structure->weightFCM);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixdualcamSyncV1TypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixdualcamSyncV1TypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixdualcamSyncV1TypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixdualcamSyncV1Type(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


MODDUALCAMSYNCV1_NAMESPACE_END
